package de.preisrobot.service;

import java.util.Set;

import javax.annotation.Resource;

import org.apache.log4j.Logger;

import de.preisrobot.business.parser.AbstractArtikelDetailParser;
import de.preisrobot.entity.Artikel;
import de.preisrobot.entity.ArtikelDetail;
import de.preisrobot.entity.ArtikelDetailId;
import de.preisrobot.entity.ArtikelProperty;
import de.preisrobot.persistence.dao.ArtikelPropertyDao;

public class ArtikelDetailProcessService
{

   private static Logger log = Logger.getLogger(ArtikelDetailProcessService.class);
   
   @Resource(name="propertyDao")
   private ArtikelPropertyDao propertyDao;
   
   private AbstractArtikelDetailParser detailParser;
   
   public void updateArtikelDetail(Artikel a)
   {
      String sourceUrlString = a.getArtikelLink();
      if(sourceUrlString == null)
      {
         log.error("Artikellink was incorrect "+sourceUrlString);
         return;
      }
      
      try
      {
         ArtikelDetail parse = detailParser.parse(sourceUrlString );
         Set<ArtikelProperty> properties = parse.getProperties();
         if(null==properties)
            return;
         
         log.info("Artikel "+a.getId()+" von Anbieter "+a.getAnbieterId()+" AKTUELLER PREIS:"+parse.getPreis()+" anz. neuer Properties "+properties.size());
         
         propertyDao.delete(a.getId());
         
         for (ArtikelProperty artikelProperty : properties)
         {            
            ArtikelProperty po = propertyDao.find(artikelProperty);
            
            if(po == null)
            {
               propertyDao.save(artikelProperty);
               po = propertyDao.find(artikelProperty);
            }
            
            ArtikelDetailId pk = new ArtikelDetailId(a.getId(),po.getId());
            
            ArtikelDetail dddd = new ArtikelDetail();
            dddd.setDetailPK(pk);
           
            try{
               
               propertyDao.saveNeu(dddd);
            }
            catch(Exception e)
            {
               log.debug(e);
            }
         }
         
      }
      catch (Exception e)
      {
         log.error("an error occured in ArtikelDetailParser ",e);
      }
   }

   public void setDetailParser(AbstractArtikelDetailParser detailParser)
   {
      this.detailParser = detailParser;
   }
}
